package com.qingcloud.adminbackend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.qingcloud.adminbackend.base.ZTreeBo;
import com.qingcloud.adminbackend.entity.sysfunction.*;
import com.qingcloud.adminbackend.entity.sysorg.SysOrgLogoDTO;
import com.qingcloud.base.remote.pojo.MenuDTO;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 系统功能表 服务类
 * </p>
 *
 * @author liyuhong
 * @since 2018-11-16
 */
public interface ISysFunctionService extends IService<SysFunction> {
    /**
     * 获取功能权限
     *
     * @param isAdmin
     * @param sysFunctionDTO
     * @return
     */
    List<MenuDTO> getFunctionByUserId(boolean isAdmin, SysFunctionDTO sysFunctionDTO);

    /**
     * 获取模块
     *
     * @param menuTypes
     * @return
     */
    List<ModuleDTO> getModuleByUserId(String menuTypes);

    /**
     * 根据客户ID获取所属功能
     *
     * @param orgId
     * @return
     */
    Set<String> getFunctionByMenuBO(MenuBO orgId);

    /**
     * 新增用户授权功能列表
     *
     * @param roleId
     * @param orgId
     * @param userId
     * @param menuType
     * @return
     */
    InitFunctionTreeDTO getUserAuthFunctions(List<String> roleId, List<String> orgId, String userId, String menuType, Boolean isAdmin);

//    /**
//     * 获取登录用户的所有权限
//     *
//     * @param userId
//     * @return
//     */
//    Set<String> getLoginUserAllFunctions(String userId, Integer menuType, Boolean isAdmin);

    List<MenuDTO> getMenuTree(String userId, Integer menuType, Boolean isAdmin);

    List<MenuDTO> getMenuTree(String userId, Integer menuType);

    /**
     * 获取所有的功能权限
     *
     * @param menuType
     * @param userId
     * @return
     */
    List<SysFunction> getAllFunction(String menuType, String userId,boolean isFull);

    /**
     * 获取所有的菜单权限
     *
     * @param menuType
     * @param userId
     * @return
     */
    List<MenuDTO> getAllMenu(String menuType, Integer urlFlag, String userId);

    /**
     * 获取所有的菜单权限
     *
     * @param menuType 菜单业务种类
     * @param userId   用户ID
     * @return 功能编码
     */
    List<String> getAllFunctionCode(String menuType, String userId);

    /**
     * 获取所有的菜单权限
     *
     * @param menuType
     * @param userId
     * @return
     */
    Map<String, Object> getFunctionByUserId(String menuType, Integer urlFlag, String userId);

    /**
     * 获取业务种类对象的Logo
     *
     * @param businessTypes
     * @param orgId
     * @return
     */
    List<SysOrgLogoDTO> getOrgLogo(String businessTypes, String orgId);

    /**
     * 查询角色授权的功能
     *
     * @param roleIdSet 角色ID集合
     * @return 角色和功能映射，key是roleId, value是所有functionId
     */
    Map<String, Collection<String>> findIdByRoleId(Collection<String> roleIdSet);


    //////////////整合
    Map<String, Object> getSysFunctionsPage(String userId, boolean isAdmin, FunctionPageRequest functionPageRequest);

    Map<String, SysFunction> addFunction(SysFunction sysFunctionDTO);

    Map<String, SysFunction> updateFunction(SysFunction sysFunctionDTO);

    SysFunction findById(String id);

    List<ZTreeBo> getFunctionsTree(boolean isAdmin, String userId);

    List<SysFunctionDTO.SysFunctionDTOTree> getFunctionsTreeV2(Integer menuType);

    List<SysFunction> getFunsByRoleId(String roleId);

    int getCountByCode(String code, String ignoreId);

    List<ZTreeBo> getFunctionsByParentID(String parentId, String loginUserId, boolean isAdmin);

    void deleteFunction(String funId);

    void deleteBusiFuncForce(Integer  menuType);

    Map<String, Object> getFunRelation(String functionId);

    void updateOrderNo(SysFunction.RequestOrderParam requestOrderParam,String userId);

    void enableOrDisable(SysFunction.RequestEnableParam requestEnableParam,String userId);

    List<SysFunction> findChild(String parentId);
}
